package com.cw.java8.stream;

import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * 流式操作03
 */
public class StreamTest03 {

    public static void main(String[] args) {
        List<Integer> lists = new LinkedList<>();
        lists.add(4);
        lists.add(5);
        lists.add(1);
        lists.add(3);
        lists.add(2);
        lists.add(5);

        //1.末端操作：遍历
        lists.stream().forEach(System.out::print);
        System.out.println("遍历\n---------------------");

        //2.末端操作：求最大值
        lists.stream().max((Integer o1, Integer o2) -> {
            return o1.compareTo(o2);
        });

        Integer maxValue = lists.stream().max(Integer::compareTo).get();
        System.out.println(maxValue + "最大值\n---------------------");

        //3.末端操作：求最小值
        Integer minValue = lists.stream().min(Integer::compareTo).get();
        System.out.println(minValue + "最小值\n---------------------");

        //4.中间操作+末端操作：过滤数据，例如过滤大于3小于8的数据，形成一个链式调用
        lists.stream()
                .filter(i -> i > 3)
                .filter(i -> i < 8)
                .sorted()
                .forEach(System.out::print);
        System.out.println("过滤数据\n---------------------");

        //末端操作结果可以赋给一个变量
        Optional<Integer> optionalT = lists.stream().min(Integer::compareTo);

        //5.末端操作：收集合并
        List<Integer> list2 = lists.stream().filter((t) ->t> 2)
                .collect(Collectors.toList());
        list2.forEach(System.out :: print);
    }
}
